package main

import (
	"fmt"
	"sync"
	"time"
)

// 4.8.2 全局唯一性操作
//对于从全局的角度只需要运行一次的代码，比如全局初始化操作，Go语言提供了一个Once
//类型来保证全局的唯一性操作

var once sync.Once

func printA() {
	fmt.Println("PrintA")
}
func printB() {
	fmt.Println("PrintB")
}

func doPrint() {
	once.Do(printA) // printA只会被调用一次
	once.Do(printB) // printB不会执行
	fmt.Println("print method")
}

func main31() {
	doPrint()
	go doPrint()
	go doPrint()

	time.Sleep(1e9)
}
